
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;
using Gman.Entity.Entities;
using Gman.Entity.Interfaces;
using Gman.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;


namespace Gman.Data
{
  //-------------------------------------------------------------------
  //Archivo     : OrdenTrabajoDA.cs
  //Proyecto    : Gman
  //Creacion    : BIS(NombreDesarrollador) 20130226
  //Modificacion: 
  //Descripcion : Clase para capa de datos.
  //-------------------------------------------------------------------
  public class OrdenTrabajoDA : IOrdenTrabajo
  {

  Database db = DatabaseFactory.CreateDatabase();

  //-----------------------------------------------------------------------------------------------
  //Nombre: Listar
  //Objetivo: Retorna una lista de registros de tipo OrdenTrabajoBE  
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public IList<OrdenTrabajoBE> Listar(OrdenTrabajoBE oItem)
  {
    IList<OrdenTrabajoBE> lista = new List<OrdenTrabajoBE>();			
    try
    {				
      DbCommand cmd = db.GetStoredProcCommand("SP_ListarOrdenTrabajo");

      using (IDataReader oR = db.ExecuteReader(cmd))
      {
        lista = MakeUniqueDatos(oR);
      }
      
    }catch (Exception ex){
      throw new Exception("OrdenTrabajoDA.Listar()", ex);
    }
    finally
    {
    }
    return lista;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Obtener
  //Objetivo: Retorna un objeto de Tipo OrdenTrabajoBE  
  //Creacion    : BIS(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public OrdenTrabajoBE Obtener(OrdenTrabajoBE oItem)
  {
    OrdenTrabajoBE itemResult = null;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerOrdenTrabajo",oItem.IDOt,"");

      using (IDataReader oR = db.ExecuteReader(cmd))
      {
        while (oR.Read())
        {
          itemResult = MakeDatosMapeados(oR);
        }
      }
      return itemResult;
    }
    catch (Exception ex)
    {
      throw new Exception("OrdenTrabajoDA.Obtener()", ex);                  
    }
    finally
    {
    }
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Registrar
  //Objetivo: Almacena el registro de un objeto de tipo OrdenTrabajoBE  
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //----------------------------------------------------------------------------------------------
  public int Registrar(OrdenTrabajoBE oItem)
  { 
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_RegistrarOrdenTrabajo");						
      db.AddInParameter(cmd, "@IDOt", DbType.Int64 , oItem.IDOt);
      db.AddInParameter(cmd, "@NroOt", DbType.String, oItem.NroOt);
      db.AddInParameter(cmd, "@TipoOt", DbType.Int32 , oItem.TipoOt);
      db.AddInParameter(cmd, "@IDProveedor", DbType.Int64 , oItem.IDProveedor);
      db.AddInParameter(cmd, "@MtvoOt", DbType.String, oItem.MtvoOt);
      db.AddInParameter(cmd, "@DescServOt", DbType.String, oItem.DescServOt);
      db.AddInParameter(cmd, "@IDPersSede", DbType.Int32 , oItem.IDPersSede);
      db.AddInParameter(cmd, "@IDPersProvee", DbType.Int32 , oItem.IDPersProvee);
      db.AddInParameter(cmd, "@IDRespSede", DbType.Int32 , oItem.IDRespSede);
      db.AddInParameter(cmd, "@IDOrdenCompra", DbType.Int64 , oItem.IDOrdenCompra);
      db.AddInParameter(cmd, "@NroContratoOt", DbType.String, oItem.NroContratoOt);
      db.AddInParameter(cmd, "@IDSede", DbType.Int64 , oItem.IDSede);
      db.AddInParameter(cmd, "@AreaOt", DbType.String, oItem.AreaOt);
      db.AddInParameter(cmd, "@TipoServOt", DbType.String, oItem.TipoServOt);
      db.AddInParameter(cmd, "@FecProgOt", DbType.DateTime, oItem.FecProgOt);
      db.AddInParameter(cmd, "@FecInicioOt", DbType.DateTime, oItem.FecInicioOt);
      db.AddInParameter(cmd, "@HrInicioOt", DbType.String, oItem.HrInicioOt);
      db.AddInParameter(cmd, "@FecFinOt", DbType.DateTime, oItem.FecFinOt);
      db.AddInParameter(cmd, "@HrFinOt", DbType.DateTime, oItem.HrFinOt);
      db.AddInParameter(cmd, "@EstadoOt", DbType.Int32 , oItem.EstadoOt);
      db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
      db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
      db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
      db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
      db.AddInParameter(cmd, "@FecMod", DbType.DateTime, oItem.FecMod);
      db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
      db.AddInParameter(cmd, "@IDEmp", DbType.Int32 , oItem.IDEmp);
      
      resultado = db.ExecuteNonQuery(cmd);      

    }
    catch (Exception ex)
    {
      throw new Exception("OrdenTrabajoDA.Registrar()", ex);
    }
    finally
    {

    }
    return resultado;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Actualizar
  //Objetivo: Actualiza el registro de un objeto de tipo OrdenTrabajoBE 
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public int Actualizar(OrdenTrabajoBE oItem)
  {
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_ActualizarOrdenTrabajo");						
      db.AddInParameter(cmd, "@IDOt", DbType.Int64 , oItem.IDOt);
      db.AddInParameter(cmd, "@NroOt", DbType.String, oItem.NroOt);
      db.AddInParameter(cmd, "@TipoOt", DbType.Int32 , oItem.TipoOt);
      db.AddInParameter(cmd, "@IDProveedor", DbType.Int64 , oItem.IDProveedor);
      db.AddInParameter(cmd, "@MtvoOt", DbType.String, oItem.MtvoOt);
      db.AddInParameter(cmd, "@DescServOt", DbType.String, oItem.DescServOt);
      db.AddInParameter(cmd, "@IDPersSede", DbType.Int32 , oItem.IDPersSede);
      db.AddInParameter(cmd, "@IDPersProvee", DbType.Int32 , oItem.IDPersProvee);
      db.AddInParameter(cmd, "@IDRespSede", DbType.Int32 , oItem.IDRespSede);
      db.AddInParameter(cmd, "@IDOrdenCompra", DbType.Int64 , oItem.IDOrdenCompra);
      db.AddInParameter(cmd, "@NroContratoOt", DbType.String, oItem.NroContratoOt);
      db.AddInParameter(cmd, "@IDSede", DbType.Int64 , oItem.IDSede);
      db.AddInParameter(cmd, "@AreaOt", DbType.String, oItem.AreaOt);
      db.AddInParameter(cmd, "@TipoServOt", DbType.String, oItem.TipoServOt);
      db.AddInParameter(cmd, "@FecProgOt", DbType.DateTime, oItem.FecProgOt);
      db.AddInParameter(cmd, "@FecInicioOt", DbType.DateTime, oItem.FecInicioOt);
      db.AddInParameter(cmd, "@HrInicioOt", DbType.String, oItem.HrInicioOt);
      db.AddInParameter(cmd, "@FecFinOt", DbType.DateTime, oItem.FecFinOt);
      db.AddInParameter(cmd, "@HrFinOt", DbType.DateTime, oItem.HrFinOt);
      db.AddInParameter(cmd, "@EstadoOt", DbType.Int32 , oItem.EstadoOt);
      db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
      db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
      db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
      db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
      db.AddInParameter(cmd, "@FecMod", DbType.DateTime, oItem.FecMod);
      db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
      db.AddInParameter(cmd, "@IDEmp", DbType.Int32 , oItem.IDEmp);
      
      resultado = db.ExecuteNonQuery(cmd);

    }
    catch (Exception ex)
    {
      throw new Exception("OrdenTrabajoDA.Actualizar()", ex);
    }
    finally
    {

    }
    return resultado;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Eliminar
  //Objetivo: Elimina el registro de un objeto de tipo OrdenTrabajoBE  
  //Creacion    : BIS(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public int Eliminar(OrdenTrabajoBE oItem)
  {
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_EliminarOrdenTrabajo");						
      db.AddInParameter(cmd, "@IDOt", DbType.Int64 , oItem.IDOt);
      

      resultado = db.ExecuteNonQuery(cmd);      

    }
    catch (Exception ex)
    {
      throw new Exception("OrdenTrabajoDA.Eliminar()", ex);
  }
  finally
  {

  }
  return resultado;
  }  

  private IList<OrdenTrabajoBE> MakeUniqueDatos(IDataReader oR)
  {
    IList<OrdenTrabajoBE> list = new List<OrdenTrabajoBE>();

    while (oR.Read())
      list.Add(MakeDatosMapeados(oR));

    return list;
  }

  private OrdenTrabajoBE MakeDatosMapeados(IDataReader oR)
  {
    var itemResult = new OrdenTrabajoBE();
    
      itemResult.IDOt= oR["IDOt"].ToInt64();
      itemResult.NroOt= oR["NroOt"].ToString();
      itemResult.TipoOt= oR["TipoOt"].ToInt32();
      itemResult.IDProveedor= oR["IDProveedor"].ToInt64();
      itemResult.MtvoOt= oR["MtvoOt"].ToString();
      itemResult.DescServOt= oR["DescServOt"].ToString();
      itemResult.IDPersSede= oR["IDPersSede"].ToInt32();
      itemResult.IDPersProvee= oR["IDPersProvee"].ToInt32();
      itemResult.IDRespSede= oR["IDRespSede"].ToInt32();
      itemResult.IDOrdenCompra= oR["IDOrdenCompra"].ToInt64();
      itemResult.NroContratoOt= oR["NroContratoOt"].ToString();
      itemResult.IDSede= oR["IDSede"].ToInt64();
      itemResult.AreaOt= oR["AreaOt"].ToString();
      itemResult.TipoServOt= oR["TipoServOt"].ToString();
      itemResult.FecProgOt= oR["FecProgOt"].ToDateTime();
      itemResult.FecInicioOt= oR["FecInicioOt"].ToDateTime();
      itemResult.HrInicioOt= oR["HrInicioOt"].ToString();
      itemResult.FecFinOt= oR["FecFinOt"].ToDateTime();
      itemResult.HrFinOt= oR["HrFinOt"].ToDateTime();
      itemResult.EstadoOt= oR["EstadoOt"].ToInt32();
      itemResult.UsuReg= oR["UsuReg"].ToString();
      itemResult.FecReg= oR["FecReg"].ToDateTime();
      itemResult.TermCnxReg= oR["TermCnxReg"].ToString();
      itemResult.UsuMod= oR["UsuMod"].ToString();
      itemResult.FecMod= oR["FecMod"].ToDateTime();
      itemResult.TermCnxMod= oR["TermCnxMod"].ToString();
      itemResult.IDEmp= oR["IDEmp"].ToInt32();
  
    return itemResult;
  }
 }
}
